Interleaving is a process of reordering a sequence of bits, data, symbols or information which is contained in a data sequence, for example by reordering the bits, data, symbols or information in a predefined or pseudo-random manner. Apparatus which performs interleaving is herein referred to as an “interleaver”.
Turbo interleavers are interleavers which are used in the generation of turbo codes, and are used at the output of a first encoder element before the reordered data from the interleaver is further encoded by a second encoder element. Interleaving in the context of turbo encoding means that the separate encodings produced by the two encoder elements are generally uncorrelated. Thus, the outputs of the two encoder elements can then be combined to produce an encoded data sequence which has good error correction performance.
Many interleavers determine the reordering sequence of their input bits, data, symbols or information based on an “interleaver sequence function” which is a mathematical function which takes the position of an input bit, data item, symbol or information block and derives a corresponding output position in the output stream of bits, data, symbols or information.
In existing encoders and decoders, calculation of the interleaver sequence function involves an implementation in hardware or equivalent software. Often, the values that are being determined in the processing of the interleaver sequence function can become large. This means that the processing logic is relatively complex and thus the processing and calculation of interleaved bit sequences is demanding. This can increase circuit complexity, size and cost, as well as increase power consumption which, for mobile applications, can cause a reduction in battery life. It is thus desirable to reduce and simplify the logic required to implement the interleaver sequence function.